﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Security.Principal;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using App_Negocio;
using System.Collections.Generic;

public partial class Evento : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
          if (!IsPostBack)
        {
            IPrincipal p = HttpContext.Current.User;
            if (!p.IsInRole("Empleado"))
            {
                Session["Mensaje"] = "Usted no posee los permisos necesarios para ingresar a esta página";

                if (Session["Identificador"] != null)
                {
                    Session["IrAPagina"] = "Principal_Clientes.aspx";
                    Response.Redirect("Bienvenida.aspx");
                }
                else
                {
                    Response.Redirect("login.aspx");
                }
            }
            else
            {
                cargarLocalidad();
                cargarTipoDocumento();
                cargarSalon();
                cargarMenu(ddlpopularMenu);
                //cargarMenuEspecial(ddlMenuEspeciales);
                cargarComboBebida();
                cargarComboTipoServivio();
                cargarListaEventoTipo();
                precargar();

                ddlPorcentajeGanancia.SelectedIndex = 6;

                //txtCantidadMenuSeleccionado.Text = "100";
                //ddlMenuesElegidos.SelectedIndex = 1;
                //ddlMenuesElegidos_SelectedIndexChanged(null, new EventArgs());
                //btnAgregarMenu_Click(null, new EventArgs());
                //txtInicio.Text = "08:00";
                //txtFin.Text = "21:00";
                //txtGanancia.Text = "25";
                //btnCalcularPrecios_Click(null, new EventArgs());
            }
          }
    }

    protected void cargarListaEventoTipo()
    {
        App_Negocio.EventoTipo eTipo = new App_Negocio.EventoTipo();
        // Obtengo la tabla del DataSet
        DataView dataView = eTipo.popularEventoTipo();

        //Vinculo con el DropDownList
        ddlTipoEvento.DataSource = dataView;

        ddlTipoEvento.DataTextField = "tEve_Nombre";
        ddlTipoEvento.DataValueField = "tEve_Id";
        ddlTipoEvento.DataBind();
    }
    
    private void precargar()
    {
        App_Negocio.Presupuesto presupuesto = (App_Negocio.Presupuesto)Session["Seleccionado"];
        //Cliente
        Session["PresupuestoConfirmado"]= presupuesto.Id;
        txtApellido.Text = presupuesto.Cliente.ApeCliente;
        txtNombre.Text = presupuesto.Cliente.NomCliente;
        txtMail.Text = presupuesto.Cliente.Email;
        lblNroCli.Text = ""+presupuesto.Cliente.ClienteId;
        Cliente clienteCompleto = new Cliente();
        //Guardo el Cliente en una variable de sesion
        clienteCompleto.ApeCliente = presupuesto.Cliente.ApeCliente;
        clienteCompleto.NomCliente = presupuesto.Cliente.NomCliente;
        clienteCompleto.Email = presupuesto.Cliente.Email;
        clienteCompleto.ClienteId = presupuesto.Cliente.ClienteId;
        Session["clienteCompleto"] = clienteCompleto;

        //Datos Grales
        txtFecha.Text = presupuesto.FechaEvento.ToShortDateString();
        tbxComentario.Text = presupuesto.Comentario;
        ddlTipoEvento.SelectedValue = presupuesto.TipoEvento.Id.ToString();
        ddlSalon.SelectedValue = presupuesto.Salon.Id.ToString();
        //cargargrilla de salon
        //
        List<App_Negocio.Presupuesto_Detalle> menuDet = presupuesto.PresupuestoDetalle;
        List<App_Negocio.Menu> menu = new List<App_Negocio.Menu>();

          foreach (Presupuesto_Detalle pDet in menuDet)
            {
                App_Negocio.Menu men = new App_Negocio.Menu();
                men.Id = pDet.Menu.Id;
                men.Nombre =  pDet.Menu.Nombre;
                menu.Add(men);
            }
        ddlMenuesElegidos.DataSource = menu;
        ddlMenuesElegidos.DataTextField = "Nombre";
        ddlMenuesElegidos.DataValueField = "Id";
        ddlMenuesElegidos.DataBind();

        //carga de bebidas
        //List<App_Negocio.Bebida> bebidaList= presupuesto.Bebida;
        //LinkedList<App_Negocio.Bebida> bebidas = new LinkedList<Bebida>(bebidaList);

        List<App_Negocio.Presupuesto_Bebida> bebidaList = presupuesto.Bebidas;
        LinkedList<App_Negocio.Presupuesto_Bebida> bebidas = new LinkedList<Presupuesto_Bebida>(bebidaList);


        grvBebidasSeleccionadas.DataSource = bebidaList;
        grvBebidasSeleccionadas.DataBind();
        Session["detallesBebida"] = bebidas;
        
        //SERVICIOS ADICIONALES

        LinkedList<ServicioAdicionalGUI> sAdList = new LinkedList<ServicioAdicionalGUI>();
        List<App_Negocio.Servicio_Adicional> sAdlista = presupuesto.ServicioAdicional;

        foreach (Servicio_Adicional sAd in sAdlista)
        {
            App_Negocio.Servicio_Adicional nuevo = new App_Negocio.Servicio_Adicional();
            nuevo.Nombre = sAd.Nombre;
            nuevo.Precio = sAd.Precio;
            nuevo.Tipo_ServicioRef = sAd.Tipo_ServicioRef;
            sAdList.AddLast(new ServicioAdicionalGUI(nuevo));
        }


        grvServicioSeleccionados.DataSource = sAdList;
        grvServicioSeleccionados.DataBind();
        Session["detalleSAd"] = sAdList;

        //
        //inicializo variable de session

        LinkedList<MenuAgregadoGUI> menuList = new LinkedList<MenuAgregadoGUI>();
        Session["MenuesElegidos"] = menuList;
    }
   
    public void cargarLocalidad()
    {
        Localidad localid = new Localidad();
        DataView dv = localid.buscarLocalidades();

        ddlLocalidad.DataSource = dv;
        ddlLocalidad.DataTextField = "loc_Nombre";
        ddlLocalidad.DataValueField = "loc_Id";
        ddlLocalidad.DataBind();

    }

    public void cargarTipoDocumento()
    {
        Tipo_Documento tipoDoc = new Tipo_Documento();
        DataView dv = tipoDoc.buscarTipoDocumentos();

        ddlTipoDoc.DataSource = dv;
        ddlTipoDoc.DataTextField = "tDoc_Nombre";
        ddlTipoDoc.DataValueField = "tDoc_Id";
        ddlTipoDoc.DataBind();

    }

    public void cargarSalon()
    {
        Salon sa = new Salon();
        DataView dv = sa.cargarSalon();

        ddlSalon.DataSource = dv;
        ddlSalon.DataTextField = "sal_Nombre";
        ddlSalon.DataValueField = "sal_Id";
        ddlSalon.DataBind();
    }

    public void cargarMenu(DropDownList ddlMenu)
    {
        App_Negocio.Menu men = new App_Negocio.Menu();

        DataView dv1 = men.cargarMenu();

        ddlMenu.DataSource = dv1;
        ddlMenu.DataTextField = "menu_Nombre";
        ddlMenu.DataValueField = "menu_Id";
        ddlMenu.DataBind();
    }
   
    public void cargarMenuEspecial(DropDownList ddlMenu)
    {
        App_Negocio.Menu men = new App_Negocio.Menu();

        DataView dv1 = men.cargarMenuEspecial();

        ddlMenu.DataSource = dv1;
        ddlMenu.DataTextField = "menu_Nombre";
        ddlMenu.DataValueField = "menu_Id";
        ddlMenu.DataBind();
    }

    protected void cargarComboBebida()
    {
        App_Negocio.Bebida bebida = new App_Negocio.Bebida();
        
        LinkedList<Bebida> bebidas = bebida.popularBebida();

        //Vinculo con el DropDownList
        ddlBebidas.DataSource = bebidas;
        ddlBebidas.DataTextField = "nombre";
        ddlBebidas.DataValueField = "id";
        ddlBebidas.DataMember = "precio";
        ddlBebidas.DataBind();
        Session["Bebidas"] = bebidas;
    }
    
    protected void cargarComboTipoServivio()
    {
        Servicio_Adicional_Tipo tipoServicio = new Servicio_Adicional_Tipo();
        DataView dataView = tipoServicio.popularsAdicionalTipo();
               
        ddlTipoServicio.DataSource = dataView;
        ddlTipoServicio.DataTextField = "tSad_Nombre";
        ddlTipoServicio.DataValueField = "tSad_Id";
        ddlTipoServicio.DataBind();
    }

    protected void borrarGrilla(GridView grilla)
    {
        DataView dv = new DataView();
        grilla.DataSource = dv;
        grilla.DataBind();
    }

    public void cargarMenuDetalles(int idMenu, GridView GVMenu, App_Negocio.Menu menu)
    {
        DataView dvMenu = menu.cargarMenuDetalles(idMenu);
        GVMenu.DataSource = dvMenu;
        GVMenu.DataKeyNames = new string[] { "Tipo_De_Alimento", "Nombre", "Descripcion", "MenuId" };
        GVMenu.DataBind();
        Session["MenuElegido"] = menu;

    }

    protected void ddlSalon_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (ddlSalon.SelectedIndex != 0)
        {
            App_Negocio.Salon salon = new App_Negocio.Salon();
            salon.Id = int.Parse(ddlSalon.SelectedValue);
            salon.buscarDatosSalon();

            lblSalonNombre.Text = salon.Nombre;
            lblSalonCapacidad.Text = salon.Capacidad.ToString();
            lblSalonDireccion.Text = salon.Calle + " Nº " + salon.Numero.ToString();
            //imgSalon.Visible = true;
            imgSalon.ImageUrl = salon.Imagen;
            SalonTable.Visible = true;
        }
        else
        {
            SalonTable.Visible = false;
            //imgSalon.Visible = false;
        }


    }
    
    protected void ddlMenuesElegidos_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (ddlMenuesElegidos.SelectedIndex != 0)
        {
            App_Negocio.Menu menu = new App_Negocio.Menu();
            menu.Id = int.Parse(ddlMenuesElegidos.SelectedItem.Value);
            menu.Nombre = ddlMenuesElegidos.SelectedItem.Text;
            
            this.cargarMenuDetalles(int.Parse(ddlMenuesElegidos.SelectedValue), GVMenuSeleccionado,menu);
        }
    }
    
    protected void ddlMenu1_SelectedIndexChanged1(object sender, EventArgs e)
    {
        if (ddlpopularMenu.SelectedIndex != 0)
        {
            App_Negocio.Menu menu = new App_Negocio.Menu();
            menu.Id = int.Parse(ddlpopularMenu.SelectedItem.Value);
            menu.Nombre = ddlpopularMenu.SelectedItem.Text;
            this.cargarMenuDetalles(int.Parse(ddlpopularMenu.SelectedValue), GVMenuSeleccionado, menu);

        }
    }
    
    //protected void ddlMenuEspeciales_SelectedIndexChanged(object sender, EventArgs e)
    //{
    //    if (ddlMenuEspeciales.SelectedIndex != 0)
    //    {
    //        this.cargarMenuDetalles(int.Parse(ddlMenuEspeciales.SelectedValue), gvMenuEspecial);
    //    }
    //}

    protected void ddlTipoServicio_SelectedIndexChanged(object sender, EventArgs e)
    {
        cargarServiciosAdicionales(int.Parse(ddlTipoServicio.SelectedValue));
    }

    public void cargarServiciosAdicionales(int tipoServicio)
    {
        ddlProveedorServivio.Items.Clear();
        Servicio_Adicional servicio = new Servicio_Adicional();

        DataView dv = servicio.buscarProveedores(tipoServicio);
        ddlProveedorServivio.DataSource = dv;
        ddlProveedorServivio.DataTextField = "sAd_Nombre";
        ddlProveedorServivio.DataValueField = "sAd_Id";
        ddlProveedorServivio.DataBind();

    }

    protected void ddlProveedorServivio_SelectedIndexChanged(object sender, EventArgs e)
    {

        //HACER BUSQUEDA PERO LA PODEMOS ROBAR A ESTA AGREGANDO SOLO UNO JEJE
        tbxDescServAd.Text = "poner descripcion de ese proveedor de serv";
        lblPrecio.Text = "$ 320";
    }
    
    protected void ddlLocalidad_SelectedIndexChanged(object sender, EventArgs e)
    {
        cargarBarrio(int.Parse(ddlLocalidad.SelectedValue));
        //cargarBarrio(ddlLocalidad.SelectedIndex);
    }
   
    public void cargarBarrio(int idLocalidad)
    {
        ddlBarrio.Items.Clear();
        Barrio ba = new Barrio();
        DataView dv = ba.buscarBarrios(idLocalidad);

        ddlBarrio.DataSource = dv;
        ddlBarrio.DataTextField = "bar_Nombre";
        ddlBarrio.DataValueField = "bar_Id";
        ddlBarrio.DataBind();
    }

    protected void btnAgregarBebida_Click(object sender, EventArgs e)
    {
       
        int indice = ddlBebidas.SelectedIndex;
        if(indice>0)
        {
            LinkedList<App_Negocio.Presupuesto_Bebida> bebidasDelEvento = (LinkedList<App_Negocio.Presupuesto_Bebida>) Session["detallesBebida"];
            LinkedList<App_Negocio.Bebida> bebidas = (LinkedList<App_Negocio.Bebida>) Session["Bebidas"];
            App_Negocio.Presupuesto_Bebida pb = new Presupuesto_Bebida();
            pb.Bebida = bebidas.ElementAt<App_Negocio.Bebida>(indice - 1);
            bebidasDelEvento.AddLast(pb);
            grvBebidasSeleccionadas.DataSource = bebidasDelEvento;
            grvBebidasSeleccionadas.DataBind();
            Session["detallesBebida"] = bebidasDelEvento;
        }
    }

    protected void grvBebidasSeleccionadas_BorrarFila(object sender, GridViewDeleteEventArgs e)
    {
        LinkedList<Presupuesto_Bebida> bebidaList = (LinkedList<Presupuesto_Bebida>)Session["detallesBebida"];
        Presupuesto_Bebida bebida = bebidaList.ElementAt<Presupuesto_Bebida>(e.RowIndex);//grvBebidasSeleccionadas.SelectedIndex);//con e.rowindex capaz anda               
        bebidaList.Remove(bebida);
        grvBebidasSeleccionadas.DataSource = bebidaList;
        grvBebidasSeleccionadas.DataBind();
        Session["detallesBebida"] = bebidaList;
    }

    protected void btnAgregarSAd_Click(object sender, EventArgs e)
    {

        App_Negocio.Presupuesto presupuesto = (App_Negocio.Presupuesto)Session["Seleccionado"];
        LinkedList<ServicioAdicionalGUI> sAdList = new LinkedList<ServicioAdicionalGUI>();
        List<App_Negocio.Servicio_Adicional> sAdlista = presupuesto.ServicioAdicional;

        foreach (Servicio_Adicional sAd in sAdlista)
        {
            App_Negocio.Servicio_Adicional nuevo = new App_Negocio.Servicio_Adicional();
            nuevo.Nombre = sAd.Nombre;
            nuevo.Precio = sAd.Precio;
            nuevo.Tipo_ServicioRef = sAd.Tipo_ServicioRef;
            sAdList.AddLast(new ServicioAdicionalGUI(nuevo));
        }


        grvServicioSeleccionados.DataSource = sAdList;
        grvServicioSeleccionados.DataBind();
        Session["detalleSAd"] = sAdList;
    }

    protected void grvServicioSeleccionados_BorrarFila(object sender, GridViewDeleteEventArgs e)
    {
        LinkedList<ServicioAdicionalGUI> sAdList = (LinkedList<ServicioAdicionalGUI>)Session["detallesSAd"];
        ServicioAdicionalGUI sAd = sAdList.ElementAt<ServicioAdicionalGUI>(e.RowIndex);//con e.rowindex capaz anda               
        sAdList.Remove(sAd);
        grvServicioSeleccionados.DataSource = sAdList;
        grvServicioSeleccionados.DataBind();
        Session["detallesSAd"] = sAdList;
    }
    
    protected void btnAgregarMenu_Click(object sender, EventArgs e)
    {
        LinkedList<MenuAgregadoGUI> menuList = (LinkedList<MenuAgregadoGUI>)Session["MenuesElegidos"];
        App_Negocio.Menu menu = (App_Negocio.Menu)Session["MenuElegido"];
        //menuList.AddLast(new MenuAgregadoGUI(menu, int.Parse(this.txtCantidadMenuSeleccionado.ToString()), menu.calcularCosto()));
        menuList.AddLast(new MenuAgregadoGUI(menu, int.Parse(this.txtCantidadMenuSeleccionado.Text)));

        gvMenuesSeleccionados.DataSource = menuList;
        gvMenuesSeleccionados.DataBind();
        Session["MenuesElegidos"] = menuList;

        
    }
    
    protected void gvMenuesSeleccionados_BorrarFila(object sender, GridViewDeleteEventArgs e)
    {
        LinkedList<MenuAgregadoGUI> menuList = (LinkedList<MenuAgregadoGUI>)Session["MenuesElegidos"];
        MenuAgregadoGUI menu = menuList.ElementAt<MenuAgregadoGUI>(e.RowIndex);//gvMenuesSeleccionados.SelectedIndex);//con e.rowindex capaz anda               
        menuList.Remove(menu);
        gvMenuesSeleccionados.DataSource = menuList;
        gvMenuesSeleccionados.DataBind();
        Session["MenuesElegidos"] = menuList;
    }

    private List<Bebida> cambiarABebidasList(LinkedList<Presupuesto_Bebida> listBebida)
    {
        List<Bebida> lista = new List<Bebida>();
        foreach (Presupuesto_Bebida pb in listBebida)
        {
            lista.Add(pb.Bebida);
        }
        return lista;
    }

    protected void guardarEvento() 
    {
        App_Negocio.Evento eventoGuardar = new App_Negocio.Evento();
        eventoGuardar.FechaEvento = DateTime.Parse(txtFecha.Text);
        eventoGuardar.Comentario = tbxComentario.Text;
        EventoTipo eTipo = new EventoTipo();
        eTipo.Id = int.Parse(ddlTipoEvento.SelectedValue.ToString());
        eventoGuardar.TipoEvento = eTipo;
        //Evento_Estado eEstado = new Evento_Estado();
        //eEstado.Numero = 1;
        eventoGuardar.EveEstado = new Evento_Estado();//eEstado;//esta hardcodeado ARREGLAR
        eventoGuardar.EveEstado.Numero = 1;
        eventoGuardar.HoraFin = txtFin.Text;
        eventoGuardar.HoraInicio = txtInicio.Text;
        Cliente cli = (Cliente) Session["clienteCompleto"];
        eventoGuardar.Cliente = cli;
        //ACTUALIZAR CLIENTE
        cli.updateCliente();
        App_Negocio.Salon sal = new Salon();
        sal.Id = int.Parse(ddlSalon.SelectedValue.ToString());
        eventoGuardar.Salon = sal;

        LinkedList<Presupuesto_Bebida> listBebida = (LinkedList<Presupuesto_Bebida>)Session["detallesBebida"];

        List<Bebida> ListaBebidas = cambiarABebidasList(listBebida);


        //MAURI CAMBIAR ESTA PARTE

        LinkedList<ServicioAdicionalGUI> sAdList = (LinkedList<ServicioAdicionalGUI>)Session["detalleSAd"];
        eventoGuardar.ServicioAdicional = new List<Servicio_Adicional>();
        App_Negocio.Servicio_Adicional sAItem = null;

        foreach (ServicioAdicionalGUI sag in sAdList)
        {
            sAItem = new Servicio_Adicional();
            sAItem.Id = sag.IdSA;
            eventoGuardar.ServicioAdicional.Add(sAItem);
        }


        eventoGuardar.Bebida = ListaBebidas;

        LinkedList<MenuAgregadoGUI> menuList = (LinkedList<MenuAgregadoGUI>)Session["MenuesElegidos"];
        
        //LinkedList<Evento_Detalle> listevDetGui = (LinkedList<Evento_Detalle>)Session["MenuesElegidos"];

        List<Evento_Detalle> ListaEventoDetalle = new List<Evento_Detalle>();
        int cantPersonas = 0;
        foreach (MenuAgregadoGUI evDetGui in menuList)
        {
            App_Negocio.Evento_Detalle evDet = new Evento_Detalle();
            evDet.Cantidad = evDetGui.Cantidad;
            evDet.Menu = new App_Negocio.Menu();
            evDet.Menu.Id = evDetGui.IdMenu;
            evDet.Precio = evDetGui.Precio;
            ListaEventoDetalle.Add(evDet);
            cantPersonas = cantPersonas + evDet.Cantidad;
        }

        




        eventoGuardar.CantPersonas = cantPersonas;
        eventoGuardar.EventoDetalle = ListaEventoDetalle;
        eventoGuardar.ImgDistribucionMesa = "~/Imagenes/Distribucion_Mesas/Salon.jpg";
        App_Negocio.Cobro cobro = new App_Negocio.Cobro();
        App_Negocio.Mesa mesas = new Mesa();
        App_Negocio.Reunion reu = new App_Negocio.Reunion();
        

        
        cobro.Fecha = System.DateTime.Now;
        cobro.Monto = int.Parse(txtPagoActual.Text);
        eventoGuardar.Cobros.Add(cobro);
        eventoGuardar.MontoTotal = float.Parse(lblMontoTotal.Text);
        //eventoGuardar.guardarCobro();
        int idEvento = 0;
        eventoGuardar.guardarEvento(out idEvento);
        reu.ActualizarReunionYPresupuesto(int.Parse(Session["ReunionId"].ToString()), int.Parse(Session["PresupuestoConfirmado"].ToString()));
        cobro.guardarCobro(idEvento);
        mesas.crearMesasEvento(idEvento, (80 / 8));//eventoGuardar.CantPersonas / 8));
        addToAgenda(eventoGuardar, idEvento);
        
    }

    protected void addToAgenda(App_Negocio.Evento even, int idEvento)
    {
        App_Negocio.Agenda agenda = new App_Negocio.Agenda();
        App_Negocio.Evento eve = new App_Negocio.Evento();
      
        App_Negocio.Reunion reu = new App_Negocio.Reunion();
        eve.Id = idEvento;
        eve.FechaEvento = even.FechaEvento;
        agenda.Descripcion = even.Cliente.NomCliente + ", " + even.Cliente.ApeCliente+ ", " + even.TipoEvento.Nombre ;
        agenda.Evento = eve;
        agenda.guardarAgenda();
    }
        
    private class ServicioAdicionalGUI
    {
        private App_Negocio.Servicio_Adicional sAd;

        public App_Negocio.Servicio_Adicional SAd
        {
            get { return sAd; }
            set { sAd = value; }
        }

        private string nombre;

        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }
        private string tipoServicio;

        public string TipoServicio
        {
            get { return tipoServicio; }
            set { tipoServicio = value; }
        }
        private string proveedor;

        public string Proveedor
        {
            get { return proveedor; }
            set { proveedor = value; }
        }
        private float precio;

        public float Precio
        {
            get { return precio; }
            set { precio = value; }
        }

        private int idSA;

        public int IdSA
        {
            get { return idSA; }
            set { idSA = value; }
        }

        public ServicioAdicionalGUI(App_Negocio.Servicio_Adicional fuente)
        {
            this.nombre = fuente.Nombre;
            this.tipoServicio = fuente.Tipo_ServicioRef.Nombre;
            this.Proveedor = "" + fuente.Proveedor_Servicio;
            this.precio = fuente.Precio;
            this.idSA = fuente.Id;
        }
    }

    private class MenuAgregadoGUI
    {

        private int idMenu;

        public int IdMenu
        {
            get { return idMenu; }
            set { idMenu = value; }
        }
        private string nombre;

        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }
        private string tipoMenu;

        public string TipoMenu
        {
            get { return tipoMenu; }
            set { tipoMenu = value; }
        }

        private int idTipo;

        public int IdTipo
        {
            get { return idTipo; }
            set { idTipo = value; }
        }
        private int cantidad;

        public int Cantidad
        {
            get { return cantidad; }
            set { cantidad = value; }
        }
        private double costo;

        public double Costo
        {
            get { return costo; }
            set { costo = value; }
        }
        private double precio;

        public double Precio
        {
            get { return precio; }
            set { precio = value; }
        }
       
        public MenuAgregadoGUI(App_Negocio.Menu fuente, int cant)
        {
            this.nombre = fuente.Nombre;
            this.tipoMenu = fuente.Menu_tipo_ref.Nombre;
            this.idTipo = fuente.Menu_tipo_ref.Id;
            this.cantidad = cant;
            this.idMenu = fuente.Id;
            this.costo = fuente.damePrecio(fuente.Id );
            this.precio = 0;

        }

        public MenuAgregadoGUI(App_Negocio.Menu fuente)
        {
            this.idMenu = fuente.Id;
        }


    }

    private class PrecioGUI
    {
        private string nombre;

        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }
        private string tipo;

        public string Tipo
        {
            get { return tipo; }
            set { tipo = value; }
        }
        private double precio;

        public double Precio
        {
          get { return precio; }
          set { precio = value; }
        }

        private double costo;

        public double Costo
        {
            get { return costo; }
            set { costo = value; }
        }


        public PrecioGUI(App_Negocio.Menu fuente, double precio, double costo)
        {
            this.nombre = fuente.Nombre;
            this.tipo = fuente.Menu_tipo_ref.Nombre;
            this.precio = precio;
            this.costo = costo;

        }
    }

    protected void btnCliente_Click(object sender, EventArgs e)
    {
        lblClienteModif.Visible = true;
        txtApellido.Enabled = true;
        txtCalleCli.Enabled = true;
        txtNombre.Enabled = true;
        txtMail.Enabled = true;
        txtNroDoc.Enabled = true;
        txtPiso.Enabled = true;
        txtTel.Enabled = true;
        ddlBarrio.Enabled = true;
        ddlLocalidad.Enabled = true;
        ddlTipoDoc.Enabled = true;
        ddlSexo.Enabled = true;
        txtNroCalle.Enabled = true;
        txtDpto.Enabled = true;


        lblContratoApell.Text = txtApellido.Text;
        lblContratoBarrio.Text = ddlBarrio.SelectedItem.Text;
        lblContratoCalle.Text = txtCalleCli.Text;
        lblContratoCiud.Text = ddlLocalidad.SelectedItem.Text;
        lblContratoFecha.Text = txtFecha.Text;
        lblContratoFechaHoy.Text = System.DateTime.Now.ToShortDateString();
        lblContratoNom.Text = txtNombre.Text;
        lblContratoNro.Text = txtNroCalle.Text;

        Cliente aCompletar = (Cliente)Session["clienteCompleto"];
        aCompletar.ApeCliente = txtApellido.Text;
        aCompletar.NomCliente = txtNombre.Text;
        aCompletar.NroDirCliente = int.Parse(txtNroCalle.Text);
        aCompletar.NroDocCliente = int.Parse(txtNroDoc.Text);
        aCompletar.DocTipo = new Tipo_Documento();
        aCompletar.DocTipo.Id = int.Parse(ddlTipoDoc.SelectedItem.Value);
        aCompletar.DocTipo.Nombre = ddlTipoDoc.SelectedItem.Text;
        aCompletar.TelCliente = int.Parse(txtTel.Text);
        aCompletar.Sexo = ddlSexo.SelectedItem.Text;
        aCompletar.Email = txtMail.Text;
        aCompletar.CalleDirCliente = txtCalleCli.Text;
        aCompletar.NroDirCliente = int.Parse(txtNroCalle.Text);
        aCompletar.PisoDirCliente = int.Parse(txtPiso.Text);
        aCompletar.DeptoDirCliente = txtDpto.Text;
        aCompletar.Bar = new Barrio();
        aCompletar.Bar.Nombre = ddlBarrio.SelectedItem.Text;
        aCompletar.Bar.Id = int.Parse(ddlBarrio.SelectedItem.Value);
        aCompletar.ClienteId = int.Parse(lblNroCli.Text);
        aCompletar.updateCliente();
        Session["clienteCompleto"] = aCompletar;

    }

    protected void btnConfirmarCancelacion_Click(object sender, EventArgs e)
    {
        guardarEvento();
        Response.Redirect("Principal_Empleados.aspx");
    }

    protected void btnCalcularPrecios_Click(object sender, EventArgs e)
    {
        double costoIndividual;
        double costodividible;

        //calcular cantidad de personas


        LinkedList<ServicioAdicionalGUI> sAdGui = (LinkedList<ServicioAdicionalGUI>)Session["detalleSAd"];

        LinkedList<MenuAgregadoGUI> menuList = (LinkedList<MenuAgregadoGUI>)Session["MenuesElegidos"];

        int cantPersonas=0;
        foreach (MenuAgregadoGUI mAg in menuList)
        {
            cantPersonas=cantPersonas + mAg.Cantidad;
        }

        foreach (ServicioAdicionalGUI sAd in sAdGui)
        {
            costodividible  =+ sAd.Precio;
        }

        LinkedList<Presupuesto_Bebida> bebidaList = (LinkedList<Presupuesto_Bebida>)Session["detallesBebida"];

        foreach (Presupuesto_Bebida beb in bebidaList)
        {
            costoIndividual =+ beb.Bebida.Precio;
        }
        
        Salon sal = new Salon();
        sal.damePrecio(int.Parse(ddlSalon.SelectedValue));
        costodividible =+ sal.Precio;
        
        

        LinkedList<PrecioGUI> precioGui = new LinkedList<PrecioGUI>();
        double precioVentaTotal = 0;

        //calculo la division entre ekl precio dividible y la cant total de invitados.
        double costoIndividualSinMenu = costodividible / cantPersonas;

        foreach (MenuAgregadoGUI mAg in menuList)
        {
            App_Negocio.Menu men = new App_Negocio.Menu();
            men.Nombre = mAg.Nombre;
            men.Menu_tipo_ref = new Menu_Tipo();
            men.Menu_tipo_ref.Nombre = mAg.TipoMenu;
            costoIndividual = mAg.Costo + costoIndividualSinMenu;
            double precio = (double)(costoIndividual + (costoIndividual) * double.Parse(ddlPorcentajeGanancia.SelectedValue)/ 100);
            //TA HARCODEADASO

            mAg.Precio = precio * 2;
            precio = mAg.Precio;
            precioGui.AddLast(new PrecioGUI(men, precio, costoIndividual));
            precioVentaTotal = precioVentaTotal + precio * mAg.Cantidad;
        }
        lblMontoAbonado.Text = "$ 0";
        lblMontoTotal.Text = precioVentaTotal.ToString();
        lblMontoRestante.Text = precioVentaTotal.ToString();
        Session["MenuesElegidos"] = menuList;
        gvPrecios.DataSource = precioGui;
        gvPrecios.DataBind();

    }

    protected void btnEnviar_Click(object sender, EventArgs e)
    {

    }
}